#ifndef ITEM_HANDLER_H
#define ITEM_HANDLER_H

#include <stdint.h>
#include <stdbool.h>

// ------------ 用户可配置宏（若未定义则使用默认值） ------------
#ifndef OPTION_BITS
#define OPTION_BITS 12  // 可选项位数（默认高12位）
#endif

#ifndef CURRENT_BITS
#define CURRENT_BITS 4   // 当前项位数（默认低4位）
#endif

// 校验位和合法性（编译时断言）
_Static_assert( (OPTION_BITS + CURRENT_BITS) <= 16, "Total bits exceed 16!");

// ------------ 核心数据结构定义 ------------
typedef union {
    uint16_t raw;  // 完整16位值
    struct {
        uint16_t current : CURRENT_BITS; // 低M位：当前项（如状态值）
        uint16_t options : OPTION_BITS;  // 高N位：可选项（如配置参数）
    } fields;
} Item;

// ------------ 验证策略函数指针类型 ------------
typedef bool (*ValidateFunc)(uint16_t current, uint16_t options);

// ------------ 预置验证策略声明 ------------
bool validate_by_bitmask(uint16_t current, uint16_t options); // 位掩码判断
bool validate_by_max(uint16_t current, uint16_t options);      // 数值范围判断

// ------------ 操作方法声明 ------------
void item_set_current(Item *obj, uint16_t val); // 直接设置当前项（自动掩码）
void item_set_options(Item *obj, uint16_t val); // 直接设置可选项（自动掩码）
bool item_safe_set_current(Item *obj, uint16_t value, ValidateFunc check); // 安全设置（需校验）

#endif // ITEM_HANDLER_H
